package cn.outsourcing.supermarket.service;

import cn.outsourcing.supermarket.common.PageResult;
import cn.outsourcing.supermarket.dto.OnlyIdPayloadDTO;
import cn.outsourcing.supermarket.dto.backstage.*;
import cn.outsourcing.supermarket.vo.backstage.*;

import java.util.List;

/**
 * 后台商品服务类
 *
 * @author gzkemays
 * @since 2021/11/3 20:04
 */
public interface BackstageGoodsService {
  /**
   * 分页获取全部商品
   *
   * @param dto 商品分页以及模糊查询
   * @param mode 分类模式
   * @param sort 排序模式
   * @return 商品值对象
   */
  PageResult<BackstageAllGoodsVO> getGoods(BackstageGoodsDTO dto, String mode, Integer sort);

  /**
   * 排序获取全部商品
   *
   * @param dto 分页
   * @param sort 排序模式
   * @return 商品值对象
   */
  PageResult<BackstageAllGoodsVO> getSortGoods(BackstageGoodsDTO dto, Integer sort);

  /**
   * 根据商品id获取商品信息
   *
   * @param id 商品id
   * @return 商品信息值对象
   */
  BackstageGoodsInfoVO getGoodsInfoById(Integer id);

  /**
   * 获取商品画廊详情
   *
   * @param dto 商品对象
   * @return 画廊对象
   */
  BackstageGalleryVO getGalleryById(BackstageGalleryDTO dto);

  /**
   * 获取商品详情规格信息
   *
   * @param dto 商品id
   * @return 商品详情规格信息
   */
  BackstageSpecVO getSpecData(OnlyIdPayloadDTO dto);

  /**
   * 获取全部规格信息
   *
   * @return 全部规格信息
   */
  List<BackstageSpecificationVO> getAllSpecification();

  /**
   * 获取全部分类
   *
   * @return 全部分类
   */
  List<BackstageEzCategoryVO> getAllCategory();

  /**
   * 获取数据显示
   *
   * @return 数据显示内容
   */
  BackstageExpressDataVO getExpressData();

  /**
   * 编辑保存商品信息
   *
   * @param dto 商品信息
   * @return 是否保存成功
   */
  int store(BackstageGoodsStoreDTO dto);

  /**
   * 控制首页显隐
   *
   * @param dto 控制以及id
   * @return 修改成功则返回OK
   */
  String indexShowStatus(BackstageUpdateStatusDTO dto);
  /**
   * 控制是否上架
   *
   * @param dto 控制以及id
   * @return 修改成功则返回OK
   */
  String saleStatus(BackstageUpdateStatusDTO dto);

  /**
   * 检查编号
   *
   * @param dto 检查编号是否唯一
   * @return 返回结果
   */
  boolean checkSku(BackstageCheckSnDTO dto);

  /**
   * 更新排序
   *
   * @param dto id 和排序下标
   * @return 返回更新结果
   */
  int updateSort(BackstageUpdateSortDTO dto);
  /**
   * 逻辑删除商品
   *
   * @param dto 商品 id
   * @return 返回更新结果
   */
  int destroy(OnlyIdPayloadDTO dto);
}
